import configmsg from './config.js';
import axios from 'axios';
import QS from 'qs';
import router from '@/router';
import {
	Message,
	MessageBox
} from 'element-ui'

const service = axios.create({
	// baseURL: configmsg.hrefURL, // api 的 base_url
	timeout: 60000 // 请求超时时间
})
axios.interceptors.request.use(async config => { //请求拦截
		let whiteUrls = ["/pc/upload/upload"];
		if (whiteUrls.indexOf(config.url) >= 0) {
			//请求拦截
			config.url = configmsg.hrefURL + config.url;
			// 每次发送请求之前判断vuex中是否存在token
			// 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
			// 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
			config.headers = {
				Authorization: localStorage.getItem("token"),
				"content-type": "multipart/form-data",
				// "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
			};
		} else {
			//请求拦截
			config.url = configmsg.hrefURL + config.url;
			// 每次发送请求之前判断vuex中是否存在token
			// 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
			// 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
			config.headers = {
				Authorization: localStorage.getItem("token"),
				"content-type": "application/json",
				// "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
			};
		}

		return config;
	},
	error => {
		return Promise.error(error);
	})
// 响应拦截
axios.interceptors.response.use(
	response => {
		const res = response.data;
		if (res.code !== 200) {
			let nologin = configmsg.nologin || -1; // 登录已失效
			if (res.code === -1) {
				localStorage.clear();
				Message.warning('您尚未登录；前去登录！');
				setTimeout(() => {
					 location.href = location.href.split("#")[0];
					// router.push('/login')
				})
			} else {
				Message.warning(res.msg)
			}
			return res;
		} else {
			return res
		}
	},
	// 服务器状态码不是200的情况    
	error => {
		console.log(error)
		if (error.code == 'ERR_NETWORK') {
			console.log(error)
			return false;
		};
		if (error.response.status) {
			let message = '';
			switch (error.response.status) {
				// 401: 未登录
				case 400:
					message = '请求错误(400)'
					break;
				case 401:
					message = '未授权，请重新登录'
					break;
				case 403:
					message = '拒绝访问(403)';
					break;
				case 404:
					message = '请求出错(404)';
					break;
				case 408:
					message = '请求超时(408)';
					break;
				case 500:
					message = '服务器错误(500)';
					break;
				case 501:
					message = '服务未实现(501)';
					break;
				case 502:
					message = '网络错误(502)';
					break;
				case 503:
					message = '服务不可用(503)';
					break;
				case 504:
					message = '网络超时(504)';
					break;
				case 505:
					message = 'HTTP版本不受支持(505)';
					break;
				default:
					message = `连接出错(${status})!`;
			}
			return Promise.reject(error.response);
		}
	}
);
router.beforeEach((to,from,next)=>{
	let token = localStorage.getItem('token');
	if(!token){
		if(to.path != '/login'){
			next({path:'/login'})
		}else{
			next()
		}
	}else{
		next()
	}
});
/** 
 * get方法，对应get请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 */
const $get = (url, params) => {
	return new Promise((resolve, reject) => {
		axios.get(url, {
				params: params
			})
			.then(res => {
				console.log('--', res)
				resolve(res);
			})
			.catch(err => {
				reject(err)
			})
	});
}
/** 
 * post方法，对应post请求 
 * @param {String} url [请求的url地址] 
 * @param {Object} params [请求时携带的参数] 
 */
const $post = (url, params) => {
	return new Promise((resolve, reject) => {
		// axios.post(url, QS.stringify(params)) //是将对象 序列化成URL的形式，以&进行拼接 （配合：content-type:application/x-www-form-urlencoded）
		axios.post(url, params)
			.then(res => {
				resolve(res);
			})
			.catch(err => {
				reject(err)
			})
	});
}

export default {
	$get: $get,
	$post: $post,
}